/**
  ******************************************************************************
  * @file    main.c
  * @author  Ezhan WPR GWJ
  * @version V1.2.0
  * @date    2025-10-23
  * @brief   电梯控制系统主程序
  ******************************************************************************
  */
	
#include "main.h"	

void callFloor1Only(void);
void callFloor2Only(void);
void callFloor3Only(void);
void callFloor1AndOpenDoor(void);
void callFloor2AndOpenDoor(void);
void callFloor3AndOpenDoor(void); 


// 定义“你好”的GB2312编码（共4个字节）
u8 chinese_hello[] = {0xC4, 0xE3, 0xBA, 0xC3};

// 发送“你好”
void RS485_Send_Hello(void)
{
    uint8_t i;
    // 遍历编码数组，逐个发送字节
    for (i = 0; i < sizeof(chinese_hello); i++)
  	{
        USART1_SendByte(chinese_hello[i]);
    }
}


//              数据地址 控制字    命令地址 控制字     
// 01设置上行       05 50 01 01 00 00 5E
// 02开门           05 50 02 01 00 00 5D
// 02不开门         05 50 02 00 00 00 5C
// 03查询是否到站   05 50 03 01 00 00 5C
// 04查询楼层       05 50 04 00 00 00 5A
// 05设置楼层       05 50 05 03 00 00 58
// 05清除楼层       05 50 05 FF 00 00 A4
// 06读取楼层       05 50 06 00 00 00 58


int main(void)
{ 
 	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    // 设置中断优先级分组为2:2位抢占优先级，2位响应优先级
	delay_init();        // 延时初始化
	TIM3_Init(999,71);   // 定时器3初始化，配置1Khz的计数频率，计数中断为1ms
  GPIO_IO_Config();    // 端口初始化
	RS485_init(9600);	   // 波特率设置为9600
	IWDG_Init(4,625);    // 预分频数为64,重载值为625,溢出时间为1s(准确时间：在 0.75秒到1.5秒 之间)
	delay_ms(500);		   // 等待外设完成初始化
	init_completed();    // 初始化完成声光提示
  
	uint8_t is_watchdog_reset = 0;
	// 上电后检查是否是看门狗复位 1是0不是
	is_watchdog_reset = Check_IWDG_Reset();
	
	while(1) 
	{
		RS485_Send_Hello();delay_ms(500);
		RS485_TX_MODE();
		printf("111");
		PBout(4)=0;
	}
//	while(1) 
//	{
//		if (FloorDetect1 == DETECT_OK && callFloorNum == 1) {
//			FloorDoor = 1;
//			callFloorNum = -1;
//			tickTime = 0;
//		}
//		if (FloorDetect2 == DETECT_OK && callFloorNum == 2) {
//			FloorDoor = 1;
//			callFloorNum = -1;
//			tickTime = 0;
//		}
//		if (FloorDetect3 == DETECT_OK && callFloorNum == 3) {
//			FloorDoor = 1;
//			callFloorNum = -1;
//			tickTime = 0;
//		} 
//		
//		if (tickTime > 400 && callFlag == 0) {
//			if (callFloorNum == 1) {
//				callFlag = 1;
//				callFloor1Only();
//			}
//			if (callFloorNum == 2) {
//				callFlag = 1;
//				callFloor2Only();
//			}
//			if (callFloorNum == 3) {
//				callFlag = 1;
//				callFloor3Only();
//			}
//		}
//		
//		if (tickTime > 800) {
//			if (callFloorNum == 1) {
//				callFlag = 0;
//				tickTime = 0;
//				callFloor1AndOpenDoor();
//			}
//			if (callFloorNum == 2) {
//				callFlag = 0;
//				tickTime = 0;
//				callFloor2AndOpenDoor();
//			}
//			if (callFloorNum == 3) {
//				callFlag = 0;
//				tickTime = 0;
//				callFloor3AndOpenDoor();
//			}
//		}
//		
//		tickTime++;
//		delay_ms(10);
//	}
}
void callFloor1Only()
{
	// 当电梯未到达目标楼层时执行的代码  未检测到开门&按纽灯关闭
	if (FloorDetect1 == DETECT_NG && FloorLight1 == LIGHT_OFF) 
	{
		FloorButton1 = 1; 
		delay_ms(300);
		FloorButton1 = 0;  
	}
}
void callFloor2Only()
{
	// 当电梯未到达目标楼层时执行的代码
	if (FloorDetect2 == DETECT_NG && FloorLight2 == LIGHT_OFF) 
	{
		FloorButton2 = 1; 
		delay_ms(300);
		FloorButton2 = 0;  
	}
}
void callFloor3Only()
{
	// 当电梯未到达目标楼层时执行的代码
	if (FloorDetect3 == DETECT_NG && FloorLight3 == LIGHT_OFF)
	{
		FloorButton3 = 1; 
		delay_ms(300);
		FloorButton3 = 0;  
	}
}

void callFloor1AndOpenDoor()
{
	// 当电梯未到达目标楼层时执行的代码
	if (FloorDetect1 == DETECT_NG && FloorLight1 == LIGHT_OFF)
	{
		FloorButton1 = 1; 
		FloorDoor = 1;
		delay_ms(300);
		FloorButton1 = 0; 
		FloorDoor = 0;	
	}
}

void callFloor2AndOpenDoor()
{
	// 当电梯未到达目标楼层时执行的代码
	if (FloorDetect2 == DETECT_NG && FloorLight2 == LIGHT_OFF) 
	{
		FloorButton2 = 1;   
		FloorDoor = 1;
		delay_ms(300);
		FloorButton2 = 0; 
		FloorDoor = 0;	
	}
}

void callFloor3AndOpenDoor()
{
	// 当电梯未到达目标楼层时执行的代码
	if (FloorDetect3 == DETECT_NG && FloorLight3 == LIGHT_OFF)
	{
		FloorButton3 = 1;  
		FloorDoor = 1;
		delay_ms(300);
		FloorButton3 = 0; 
		FloorDoor = 0; 
	} 
}
	 
	 

